package xinhao.ll;

import xinhao.Production;
import xinhao.Symbol;
import java.util.Set;

/**
 * @author by xinhao  2021/8/15
 * 可选集 Select集
 * A→aβ : a 是终结符，β 是文法符号串，那么这个产生式的可选集SELECT(A→aβ) 就是这个终结符，即{a}。
 * A→ε : 空产生式对应的可选集SELECT(A→ε) 就是A的后继符号集，即 FOLLOW(A)。
 * A→Bβ : B 是非终结符，β 是文法符号串，那么这个产生式的可选集SELECT(A→Bβ) 就是文法符号串Bβ的串首终结符集，即FIRST(Bβ)。
 *  注意，如果`FIRST(Bβ)`包含空串ε，即文法符号串`Bβ`能推导出空串ε，那么还要将`A`的后继符号集添加到产生式对应的可选集中。
 */
public class SelectSet {

    // 这个可选集对应产生式
    private final Production production;

    // 可选的符号集合
    private final Set<Symbol> set;


    public SelectSet(Production production, Set<Symbol> set) {
        this.production = production;
        this.set = set;
    }

    public Production getProduction() {
        return production;
    }

    public Set<Symbol> getSet() {
        return set;
    }

    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder("SelectSet{");
        sb.append("production=").append(production);
        sb.append(", set=").append(set);
        sb.append('}');
        return sb.toString();
    }
}
